/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import modelo.Proveedor;

/**
 *
 * @author Cristian Perez
 */
public class ProveedoresDao {
    private static ProveedoresDao instance = null;

    public ProveedoresDao() {
        //Instanciacion de Singleton
    }

    public static ProveedoresDao getInstance() {
        if (instance == null) {
            instance = new ProveedoresDao();
        }
        return instance;
    }

    public void insertar(Connection c, Proveedor p) throws SQLException {
        PreparedStatement pstmt = null;
        try {
            String query = "INSERT INTO proveedores (razonSocial, cuit, condIva, domicilio, codPostal, provincia, localidad, telefono, celular, radio, fax, mail, web) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)";
            pstmt = c.prepareStatement(query);
            pstmt.setString(1, p.getRazSocial().toUpperCase().trim());
            pstmt.setString(2, p.getCuit().trim());
            pstmt.setInt(3, p.getCondIva());
            pstmt.setString(4, p.getDomicilio().toUpperCase().trim());
            pstmt.setInt(5, p.getCodPostal());
            pstmt.setString(6, p.getProvincia().toUpperCase().trim());
            pstmt.setString(7, p.getLocalidad().toUpperCase().trim());
            pstmt.setString(8, p.getTelefono().toUpperCase().trim());
            pstmt.setString(9, p.getCelular().toUpperCase().trim());
            pstmt.setString(10, p.getRadio().toUpperCase().trim());
            pstmt.setString(11, p.getFax().toUpperCase().trim());
            pstmt.setString(12, p.getMail().toUpperCase().trim());
            pstmt.setString(13, p.getWeb().toUpperCase().trim());
            pstmt.execute();
        }catch(Exception e) {e.printStackTrace();}
    }

    public void eliminar(Connection c, Proveedor p) throws SQLException {
        Statement stmt = null;
        try {
            String query = "DELETE FROM proveedores WHERE id='"+p.getId()+"'";
            stmt = c.createStatement();
            stmt.execute(query);
        }catch(Exception e){e.printStackTrace();}
    }

    public void modificar(Connection c, Proveedor p) throws SQLException {
        PreparedStatement pstmt = null;
        try {
            String query = "UPDATE proveedores SET razonSocial = ?, cuit = ?, condIva = ?, domicilio = ?, codPostal = ?, provincia = ?, localidad = ?, telefono = ?, celular = ?, radio = ?, fax = ?, mail = ?, web = ? WHERE id='"+p.getId()+"'";
            pstmt = c.prepareStatement(query);
            pstmt.setString(1, p.getRazSocial().toUpperCase().trim());
            pstmt.setString(2, p.getCuit().trim());
            pstmt.setInt(3, p.getCondIva());
            pstmt.setString(4, p.getDomicilio().toUpperCase().trim());
            pstmt.setInt(5, p.getCodPostal());
            pstmt.setString(6, p.getProvincia().toUpperCase().trim());
            pstmt.setString(7, p.getLocalidad().toUpperCase().trim());
            pstmt.setString(8, p.getTelefono().toUpperCase().trim());
            pstmt.setString(9, p.getCelular().toUpperCase().trim());
            pstmt.setString(10, p.getRadio().toUpperCase().trim());
            pstmt.setString(11, p.getFax().toUpperCase().trim());
            pstmt.setString(12, p.getMail().toUpperCase().trim());
            pstmt.setString(13, p.getWeb().toUpperCase().trim());
            pstmt.execute();
        }catch(Exception e) {e.printStackTrace();}
    }

    public ArrayList getTodos (Connection c) throws SQLException {
        //Creo la variable lista donde la consulta me va a devolver los registros
        ArrayList lista = new ArrayList();
        Statement stmtConsulta = null;

        //Creo la consulta
            String laConsulta = "SELECT * FROM proveedores ORDER BY id ASC";
            //Creo la sentencia
            stmtConsulta = c.createStatement();
            //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
            ResultSet rs = stmtConsulta.executeQuery(laConsulta);

            //Cargo la lista
            while (rs.next()) {
                Proveedor provAux = new Proveedor(rs.getInt("id"),rs.getString("razonSocial"), rs.getString("cuit"), rs.getInt("condIva"), rs.getString("domicilio"), rs.getInt("codPostal"), rs.getString("provincia"), rs.getString("localidad"), rs.getString("telefono"), rs.getString("celular"), rs.getString("radio"), rs.getString("fax"), rs.getString("mail"), rs.getString("web"));
                lista.add(provAux);
            }
            stmtConsulta.close();
            //Retorno la lista
            return lista;
    }

    public int devolverSiguienteCodigo(Connection c) {
        Statement stmt = null;
        int id = 0;
        try {
            String query = "SELECT MAX(id) FROM proveedores";
            stmt = c.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            if (rs.next()) {
                id = rs.getInt(1) + 1;
            }
        }catch(Exception e) {e.printStackTrace();}
        return id;
    }

    public boolean existeFiltroProv (Connection c, String var) throws SQLException {
        Statement stmtConsulta = null;
        ArrayList lista = new ArrayList();
        boolean existe = false;
        try {
            //Creo la consulta
            String laConsulta = "SELECT * FROM proveedores WHERE razonSocial like '%"+var+"%'";
            //Creo la sentencia
            stmtConsulta = c.createStatement();
            //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
            ResultSet rs = stmtConsulta.executeQuery(laConsulta);
            if (rs.next()) {
                existe = true;
            }
        }catch(Exception e) {e.printStackTrace();}
        finally {
            try {
                stmtConsulta.close();
            }catch(Exception ee) {}
        }
        return existe;
    }

    public ArrayList getProveedorXrazonSocial (Connection c, String var) throws SQLException {
        Statement stmtConsulta = null;
        ArrayList lista = new ArrayList();
        //Creo la consulta
        String laConsulta = "SELECT * FROM proveedores WHERE razonSocial like '%"+var+"%'";
        //Creo la sentencia
        stmtConsulta = c.createStatement();
        //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
        ResultSet rs = stmtConsulta.executeQuery(laConsulta);
        while (rs.next()) {
            Proveedor provAux = new Proveedor(rs.getInt("id"),rs.getString("razonSocial"), rs.getString("cuit"), rs.getInt("condIva"), rs.getString("domicilio"), rs.getInt("codPostal"), rs.getString("provincia"), rs.getString("localidad"), rs.getString("telefono"), rs.getString("celular"), rs.getString("radio"), rs.getString("fax"), rs.getString("mail"), rs.getString("web"));
            lista.add(provAux);
        }
        stmtConsulta.close();
        return lista;
    }

     public Proveedor getProveedorXcodigo (Connection c, int id) throws SQLException {
        Statement stmtConsulta = null;
        Proveedor provAux = null;
        //Creo la consulta
        String laConsulta = "SELECT * FROM proveedores WHERE id='"+id+"'";
        //Creo la sentencia
        stmtConsulta = c.createStatement();
        //Ejecuto la sentencia con la consulta como parametro y almaceno el resultado en una variable de tipo ResultSet
        ResultSet rs = stmtConsulta.executeQuery(laConsulta);
        if (rs.next()) {
            provAux = new Proveedor(rs.getInt("id"),rs.getString("razonSocial"), rs.getString("cuit"), rs.getInt("condIva"), rs.getString("domicilio"), rs.getInt("codPostal"), rs.getString("provincia"), rs.getString("localidad"), rs.getString("telefono"), rs.getString("celular"), rs.getString("radio"), rs.getString("fax"), rs.getString("mail"), rs.getString("web"));
        }
        return provAux;
    }
}
